home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj8506.arc / FILEIO.COB < prev    next >
Text File  |  1986-09-14  |  12KB  |  357 lines

  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.     FILEIO.
  3.       *        FILE I-O BENCHMARK
  4.  
  5.        ENVIRONMENT DIVISION.
  6.        CONFIGURATION SECTION.
  7.        SOURCE-COMPUTER.  IBM-PC.
  8.        OBJECT-COMPUTER.  IBM-PC.
  9.       *
  10.        INPUT-OUTPUT SECTION.
  11.        FILE-CONTROL.
  12.  
  13.       * THESE SELECT STATEMENTS ARE FOR RMCOBOL
  14.  
  15.       *    SELECT SEQ-FILE1
  16.       *           ASSIGN TO INPUT-OUTPUT, "B:FILE1.SEQ"
  17.       *           ORGANIZATION BINARY SEQUENTIAL.
  18.       *    SELECT SEQ-FILE2
  19.       *           ASSIGN TO OUTPUT,       "B:FILE2.SEQ"
  20.       *           ORGANIZATION BINARY SEQUENTIAL.
  21.       *    SELECT REL-FILE3
  22.       *           ASSIGN TO RANDOM, "B:FILE3.REL"
  23.       *           ORGANIZATION RELATIVE
  24.       *           ACCESS DYNAMIC
  25.       *           RELATIVE KEY REC-NUM
  26.       *           FILE STATUS IO-STAT.
  27.       *    SELECT INX-FILE4
  28.       *           ASSIGN TO RANDOM, "B:FILE4.DAT"
  29.       *           ORGANIZATION INDEXED
  30.       *           ACCESS DYNAMIC
  31.       *           RECORD KEY REC-KEY
  32.       *           ALTERNATE RECORD KEY ALT-KEY WITH DUPLICATES
  33.       *           FILE STATUS IO-STAT.
  34.  
  35.       * THESE SELECT STATEMENTS ARE FOR REALIA COBOL
  36.  
  37.            SELECT SEQ-FILE1
  38.                   ASSIGN TO  "B:FILE1.SEQ[F]"
  39.                   ORGANIZATION SEQUENTIAL.
  40.  
  41.            SELECT SEQ-FILE2
  42.                   ASSIGN TO  "B:FILE2.SEQ[F]"
  43.                   ORGANIZATION SEQUENTIAL.
  44.  
  45.            SELECT REL-FILE3
  46.                   ASSIGN TO  "B:FILE3.REL[F]"
  47.                   ORGANIZATION RELATIVE
  48.                   ACCESS DYNAMIC
  49.                   RELATIVE KEY REC-NUM
  50.                   FILE STATUS IO-STAT.
  51.  
  52.            SELECT INX-FILE4
  53.                   ASSIGN TO  "B:FILE4.DAT"
  54.                   ORGANIZATION INDEXED
  55.                   ACCESS DYNAMIC
  56.                   RECORD KEY REC-KEY
  57.                   ALTERNATE RECORD KEY ALT-KEY WITH DUPLICATES
  58.                   FILE STATUS IO-STAT.
  59.  
  60.        DATA DIVISION.
  61.        FILE SECTION.
  62.        FD  SEQ-FILE1 LABEL RECORDS ARE STANDARD.
  63.        01  RECORD-1.
  64.            05  SEQ-REC-WORD               PIC X(7).
  65.            05  SEQ-REC-NUM                PIC 9999.
  66.            05  SEQ-REC-TAIL               PIC X(89).
  67.        FD  SEQ-FILE2 LABEL RECORDS ARE STANDARD.
  68.        01  RECORD-2                       PIC X(100).
  69.        FD  REL-FILE3 LABEL RECORDS ARE STANDARD.
  70.        01  RECORD-3.
  71.            05  REL-REC-WORD               PIC X(7).
  72.            05  REL-REC-NUM                PIC 9999.
  73.            05  REL-REC-TAIL               PIC X(89).
  74.        FD  INX-FILE4 LABEL RECORDS ARE STANDARD.
  75.        01  RECORD-4.
  76.            05  INX-REC-WORD               PIC X(7).
  77.            05  REC-KEY                    PIC XXXX.
  78.            05  ALT-WORD                   PIC X(5).
  79.            05  ALT-KEY                    PIC XXXX.
  80.            05  INX-REC-TAIL               PIC X(80).
  81.  
  82.        WORKING-STORAGE SECTION.
  83.        77  REC-LIMIT                      PIC S999 COMP-3
  84.                                                    VALUE 300.
  85.        77  REC-COUNT                      PIC S999 COMP-3.
  86.        77  REC-NUM                        PIC S999 COMP-3.
  87.        77  HALF-WAY                       PIC S999 COMP-3.
  88.        77  COUNTER                        PIC S999 COMP-3.
  89.  
  90.        01  IO-ERR-MSG.
  91.            05  FILLER        PIC X(16) VALUE "IO-ERROR STATUS ".
  92.            05  IO-STAT                    PIC XX.
  93.        01  FILE-MSG.
  94.            05  FILE-TYPE                  PIC X(11).
  95.            05  IO-TYPE                    PIC X(6).
  96.            05  MAX-RECS                   PIC ZZZ9.
  97.            05  FILLER   PIC X(8)   VALUE " RECORDS".
  98.  
  99.       * COPY TIMERDAT for RM, COPY "TIMERDAT.CBL" for Realia.
  100.            COPY TIMERDAT.
  101.  
  102.        PROCEDURE DIVISION.
  103.        DECLARATIVES.
  104.        IO-ERROR SECTION.
  105.            USE AFTER STANDARD ERROR PROCEDURE ON REL-FILE3,
  106.                                                  INX-FILE4.
  107.        REL-IO-ERROR.
  108.            DISPLAY " ".
  109.            DISPLAY " ".
  110.            DISPLAY " ".
  111.            DISPLAY " ".
  112.            DISPLAY " ".
  113.            DISPLAY " ".
  114.            DISPLAY IO-ERR-MSG.
  115.            STOP RUN.
  116.        END DECLARATIVES.
  117.  
  118.        MAINLINE SECTION.
  119.        000-MAINLINE.
  120.            DISPLAY " ".
  121.            DISPLAY " ".
  122.            DISPLAY " ".
  123.            DISPLAY " ".
  124.            DISPLAY " ".
  125.            DISPLAY " ".
  126.            DISPLAY " ".
  127.            PERFORM 100-SEQ-FILE-I-O   THRU 100-EXIT.
  128.            PERFORM 200-SEQ-FILE-COPY  THRU 200-EXIT.
  129.            PERFORM 300-REL-FILE-I-O   THRU 300-EXIT.
  130.            PERFORM 400-INX-FILE-WRITE THRU 400-EXIT.
  131.            PERFORM 500-INX-FILE-READ  THRU 500-EXIT.
  132.            PERFORM 600-INX-FILE-IO    THRU 600-EXIT.
  133.            STOP RUN.
  134.  
  135.        100-SEQ-FILE-I-O.
  136.            MOVE "SEQUENTIAL " TO FILE-TYPE.
  137.            MOVE REC-LIMIT TO MAX-RECS.
  138.            MOVE "WRITE "  TO IO-TYPE.
  139.            DISPLAY FILE-MSG.
  140.            ACCEPT TIMER-START FROM TIME.
  141.            OPEN OUTPUT SEQ-FILE1.
  142.            PERFORM 120-SEQ-LOOP THRU 120-EXIT
  143.              VARYING REC-COUNT FROM 1 BY 1
  144.              UNTIL REC-COUNT > REC-LIMIT.
  145.            CLOSE SEQ-FILE1.
  146.            ACCEPT TIMER-END FROM TIME.
  147.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  148.            DISPLAY ELAPSED-TIME.
  149.  
  150.            MOVE "READ "  TO IO-TYPE.
  151.            DISPLAY FILE-MSG.
  152.            ACCEPT TIMER-START FROM TIME.
  153.            OPEN INPUT SEQ-FILE1.
  154.            PERFORM 130-SEQ-LOOP THRU 130-EXIT
  155.               VARYING REC-COUNT FROM 1 BY 1
  156.               UNTIL REC-COUNT > REC-LIMIT.
  157.            CLOSE SEQ-FILE1.
  158.            ACCEPT TIMER-END FROM TIME.
  159.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  160.            DISPLAY ELAPSED-TIME.
  161.        100-EXIT.    EXIT.
  162.  
  163.        120-SEQ-LOOP.
  164.            MOVE "RECORD"  TO SEQ-REC-WORD.
  165.            MOVE REC-COUNT TO SEQ-REC-NUM.
  166.            MOVE SPACES    TO SEQ-REC-TAIL.
  167.            WRITE RECORD-1.
  168.        120-EXIT.    EXIT.
  169.  
  170.        130-SEQ-LOOP.
  171.            READ SEQ-FILE1.
  172.        130-EXIT.    EXIT.
  173.  
  174.        200-SEQ-FILE-COPY.
  175.            MOVE "COPY  "  TO IO-TYPE.
  176.            DISPLAY FILE-MSG.
  177.            ACCEPT TIMER-START FROM TIME.
  178.            OPEN  INPUT SEQ-FILE1
  179.                 OUTPUT SEQ-FILE2.
  180.            PERFORM 220-COPY-LOOP THRU 220-EXIT
  181.               VARYING REC-COUNT FROM 1 BY 1
  182.               UNTIL REC-COUNT > REC-LIMIT.
  183.            CLOSE SEQ-FILE1, SEQ-FILE2.
  184.            ACCEPT TIMER-END FROM TIME.
  185.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  186.            DISPLAY ELAPSED-TIME.
  187.        200-EXIT.    EXIT.
  188.  
  189.        220-COPY-LOOP.
  190.            READ SEQ-FILE1.
  191.            MOVE RECORD-1 TO RECORD-2.
  192.            WRITE RECORD-2.
  193.        220-EXIT.    EXIT.
  194.  
  195.        300-REL-FILE-I-O.
  196.            MOVE "RELATIVE " TO FILE-TYPE.
  197.            MOVE "WRITE" TO IO-TYPE.
  198.            DISPLAY FILE-MSG.
  199.            ACCEPT TIMER-START FROM TIME.
  200.            OPEN OUTPUT REL-FILE3.
  201.            PERFORM 310-REL-LOOP THRU 310-EXIT
  202.                VARYING REC-NUM FROM 1 BY 1
  203.                UNTIL REC-NUM > REC-LIMIT.
  204.            CLOSE REL-FILE3.
  205.            ACCEPT TIMER-END FROM TIME.
  206.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  207.            DISPLAY ELAPSED-TIME.
  208.  
  209.            MOVE "READ " TO IO-TYPE.
  210.            DISPLAY FILE-MSG.
  211.            COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
  212.            ACCEPT TIMER-START FROM TIME.
  213.            OPEN INPUT REL-FILE3.
  214.            PERFORM 320-REL-LOOP THRU 320-EXIT
  215.                VARYING REC-COUNT FROM HALF-WAY BY 1
  216.                UNTIL   REC-COUNT > REC-LIMIT.
  217.            CLOSE REL-FILE3.
  218.            ACCEPT TIMER-END FROM TIME.
  219.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  220.            DISPLAY ELAPSED-TIME.
  221.  
  222.            MOVE "RD-WRT" TO IO-TYPE.
  223.            DISPLAY FILE-MSG.
  224.            COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
  225.            ACCEPT TIMER-START FROM TIME.
  226.            OPEN I-O REL-FILE3.
  227.            PERFORM 330-REL-LOOP THRU 330-EXIT
  228.                VARYING REC-COUNT FROM HALF-WAY BY 1
  229.                UNTIL   REC-COUNT > REC-LIMIT.
  230.            CLOSE REL-FILE3.
  231.            ACCEPT TIMER-END FROM TIME.
  232.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  233.            DISPLAY ELAPSED-TIME.
  234.        300-EXIT.    EXIT.
  235.  
  236.        310-REL-LOOP.
  237.            MOVE "RECORD"  TO REL-REC-WORD.
  238.            MOVE REC-NUM   TO REL-REC-NUM.
  239.            MOVE SPACES    TO REL-REC-TAIL.
  240.            WRITE RECORD-3.
  241.        310-EXIT.    EXIT.
  242.  
  243.        320-REL-LOOP.
  244.            MOVE REC-COUNT TO REC-NUM.
  245.            READ REL-FILE3.
  246.            COMPUTE REC-NUM = REC-NUM - HALF-WAY + 1.
  247.            READ REL-FILE3.
  248.        320-EXIT.    EXIT.
  249.  
  250.        330-REL-LOOP.
  251.            MOVE REC-COUNT TO REC-NUM.
  252.            READ REL-FILE3.
  253.            REWRITE RECORD-3.
  254.            COMPUTE REC-NUM = REC-NUM - HALF-WAY + 1.
  255.            READ REL-FILE3.
  256.            REWRITE RECORD-3.
  257.        330-EXIT.    EXIT.
  258.  
  259.        400-INX-FILE-WRITE.
  260.            MOVE "INDEXED " TO FILE-TYPE.
  261.            MOVE "WRITE"    TO IO-TYPE.
  262.            DISPLAY FILE-MSG.
  263.            COMPUTE HALF-WAY = REC-LIMIT / 2 + 1.
  264.            MOVE ZERO TO COUNTER.
  265.            ACCEPT TIMER-START FROM TIME.
  266.            OPEN OUTPUT INX-FILE4.
  267.            PERFORM 420-INX-LOOP THRU 420-EXIT
  268.                VARYING REC-COUNT FROM HALF-WAY BY 1
  269.                UNTIL   REC-COUNT > REC-LIMIT.
  270.            CLOSE INX-FILE4.
  271.            ACCEPT TIMER-END FROM TIME.
  272.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  273.            DISPLAY ELAPSED-TIME.
  274.        400-EXIT.    EXIT.
  275.  
  276.        420-INX-LOOP.
  277.            MOVE "RECORD" TO INX-REC-WORD.
  278.            MOVE REC-COUNT TO REC-KEY.
  279.            ADD 1 TO COUNTER.
  280.            MOVE COUNTER TO ALT-KEY.
  281.            MOVE " ALT " TO ALT-WORD.
  282.            MOVE SPACES  TO INX-REC-TAIL.
  283.            WRITE RECORD-4.
  284.            COMPUTE REC-NUM = REC-COUNT - HALF-WAY + 1.
  285.            MOVE "RECORD" TO INX-REC-WORD.
  286.            MOVE REC-NUM TO REC-KEY.
  287.            ADD 1 TO COUNTER.
  288.            MOVE COUNTER TO ALT-KEY.
  289.            MOVE " ALT " TO ALT-WORD.
  290.            MOVE SPACES  TO INX-REC-TAIL.
  291.            WRITE RECORD-4.
  292.        420-EXIT.    EXIT.
  293.  
  294.        500-INX-FILE-READ.
  295.            MOVE "READ"    TO IO-TYPE.
  296.            DISPLAY FILE-MSG.
  297.            MOVE ZERO TO REC-NUM.
  298.            ACCEPT TIMER-START FROM TIME.
  299.            OPEN INPUT INX-FILE4.
  300.            PERFORM 520-INX-LOOP THRU 520-EXIT
  301.                VARYING REC-COUNT FROM REC-LIMIT BY -1
  302.                UNTIL   REC-COUNT < HALF-WAY.
  303.            CLOSE INX-FILE4.
  304.            ACCEPT TIMER-END FROM TIME.
  305.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  306.            DISPLAY ELAPSED-TIME.
  307.        500-EXIT.    EXIT.
  308.  
  309.        520-INX-LOOP.
  310.            MOVE REC-COUNT TO REC-KEY.
  311.            READ INX-FILE4 KEY IS REC-KEY
  312.               INVALID KEY GO TO 990-STOP.
  313.            ADD 1 TO REC-NUM.
  314.            MOVE REC-NUM TO REC-KEY.
  315.            READ INX-FILE4 KEY IS REC-KEY
  316.                INVALID KEY GO TO 990-STOP.
  317.        520-EXIT.    EXIT.
  318.  
  319.        600-INX-FILE-IO.
  320.            MOVE "RD-WRT"  TO IO-TYPE.
  321.            DISPLAY FILE-MSG.
  322.            MOVE 200  TO COUNTER.
  323.            MOVE ZERO TO REC-NUM.
  324.            ACCEPT TIMER-START FROM TIME.
  325.            OPEN I-O INX-FILE4.
  326.            PERFORM 620-INX-LOOP THRU 620-EXIT
  327.                VARYING REC-COUNT FROM REC-LIMIT BY -1
  328.                UNTIL   REC-COUNT < HALF-WAY.
  329.            CLOSE INX-FILE4.
  330.            ACCEPT TIMER-END FROM TIME.
  331.            PERFORM 2400-CALC-TIME THRU 2400-EXIT.
  332.            DISPLAY ELAPSED-TIME.
  333.        600-EXIT.    EXIT.
  334.  
  335.        620-INX-LOOP.
  336.            MOVE REC-COUNT TO REC-KEY.
  337.            READ INX-FILE4 KEY IS REC-KEY
  338.               INVALID KEY GO TO 990-STOP.
  339.            SUBTRACT 1 FROM COUNTER.
  340.            MOVE COUNTER TO ALT-KEY.
  341.            REWRITE RECORD-4.
  342.            ADD 1 TO REC-NUM.
  343.            MOVE REC-NUM TO REC-KEY.
  344.            READ INX-FILE4 KEY IS REC-KEY
  345.               INVALID KEY GO TO 990-STOP.
  346.            SUBTRACT 1 FROM COUNTER.
  347.            MOVE COUNTER TO ALT-KEY.
  348.            REWRITE RECORD-4.
  349.        620-EXIT.    EXIT.
  350.  
  351.        990-STOP.
  352.            DISPLAY "INVALID KEY   ", REC-KEY.
  353.            STOP RUN.
  354.  
  355.       * COPY TIMERPRO for RM, COPY "TIMERPRO.CBL" for Realia.
  356.            COPY TIMERPRO.
  357.